package com.javabase.study.ArrayStudy;

import java.util.Arrays;

/**
 * TODO
 * 内容：测试学习二分查找算法
 * 二分检索的基本思想是设数组中的元素从小到大有序的存放再数组中，首先将给定值key
 * 与数组中间位置上的元素比较，如果相等，则检索成功，否则，若key小，则再数组前半部分
 * 中继续进行二分法检索。若key大， 则再数组的后半部分继续进行二分法检索。这样经过
 * 一次比较就缩小一般的检索区间，如此进行下去，直到检索成功或失败。
 * 作者:jxx
 * 创建时间：2021/6/23
 */
public class TestBinarySearch {
    public static void main(String[] args){

        int[] arr = {0,15,2,10,4,60,55,80,99};
        Arrays.sort(arr);

        System.out.println(Arrays.toString(arr));
        TestBinarySearch testBinarySearch = new TestBinarySearch();
        int result = testBinarySearch.binarySearch(arr,4);
        System.out.println(result);

    }
    public int binarySearch(int[] src,int key){

        int low = 0;
        int high = src.length - 1;

        while (low <= high){
            int middle = (low + high) / 2;
            if (key == src[middle]){
                return middle;
            }else if(key > src[middle]){
                low = middle + 1;

            }else {
                high = middle - 1;
            }

        }

        return -1;
    }
}


